﻿///<reference path="../../../../Scripts/jquery-1.4.1-vsdoc.js"/>
///<reference path="../utils/Utils.js"/>


function TabBase(id) {
    var _thisId = id;
    var _container;   
    var _topPanel;
    var _middlePanel;
    var _bottomPanel;
    var _bibleBookPane;
    var _isVirgin = true;

    function Init()
    {    
        _container = $("<div>", { className: "tab" });
        _topPanel = $("<div>", { clasName: "tabPanel" }).appendTo(_container);
        _middlePanel = $("<div>", { clasName: "tabPanel" }).appendTo(_container);
        _bottomPanel = $("<div>", { clasName: "tabPanel" }).appendTo(_container);
        _bibleBookPane = new BibleBookPane(_thisId + "_bibleBookPane", _middlePanel);
    }

    this.GetBibleBookPane = function () {
        return _bibleBookPane;
    }

    this.GetContainer = function () {
        return _container;
    }

    this.Render = function () {
        _bibleBookPane.Render();
        AddWelcomePane();    
    }    

    this.ClearWelcomePane = function () {
        if (_isVirgin) {
            _topPanel.html("");
            _isVirgin = false;
        }
    }

    this.ResetWelcomePane = function () {
        if (!_isVirgin) {
            AddWelcomePane();
            _isVirgin = true;
        }
    }

    function AddWelcomePane() {
        _topPanel.append(new WelcomePageBase().ToHtml());
    }

    Init();   
}


function TabsManager(id)
{
    var _thisId = id;    
    var _container;        
    var _activeTabIndex = 0;
    var _tabs = [];
    var _newTabName = "NewTab";
    var _systemSelect = false;  // для метода select(), чтоб понять, что не надо создавать ещё одну вкладку     
    var _tabTemplate = "<li class='smallText tabHeader'><a class='tabHeaderAnchor' href='#{href}'>#{label}</a> <span class='ui-icon ui-icon-close clickable'>Remove Tab</span></li>"
    var _tabCounter = 1;

    function Init() {
        _container = $("<div>", { id: _thisId, className: "windowFullHeight" });

        _container.append($("<ul><li><a href='#" + _thisId + "_tabs-0'></a></li></ul><div id='"
                        + _thisId + "_tabs-0'><p></p></div>"));
    }  
    

    this.GetContainer = function() {
        return _container;
    }

    this.GetActiveTab = function () {
        return _tabs[_activeTabIndex];
    }

    this.GetTabsCount = function () {
        return _tabs.length - 1;
    }

    this.SetActiveTabTitle = function (title) {
        if (title == undefined)
            title = "NewTab";
        $($("#" + _thisId + " a.tabHeaderAnchor")[_activeTabIndex]).html(title);
    }

    this.Render = function () {

        _container.tabs({
            tabTemplate: _tabTemplate,
            add: function (event, ui) {
                var newTab = new TabBase(_thisId + "_tabs-" + _tabCounter);
                newTab.Render();
                _tabs.push(newTab);
                $(ui.panel).addClass("smallText").append(newTab.GetContainer());
            },
            show: function (event, ui) {
                $(event.target).find("span.ui-icon-close").css("display", "none");

                var liElements = $("li", _container);
                _activeTabIndex = liElements.index($(ui.tab).parent());

                if (liElements.length != 2)  // запрещаем удалять последнюю вкладку
                    $($("#" + _thisId + " span.ui-icon-close")[_activeTabIndex]).css("display", "block");

                $(window).resize();  // скрытые вкладки почему то не верно изменяются по высоте                
            },
            select: function (event, ui) {
                if (_systemSelect) {
                    _systemSelect = false;
                }
                else {
                    var liElements = $("li", _container);

                    if (liElements.length - 1 == ui.index) {
                        $($("#" + _thisId + " a.tabHeaderAnchor")[_tabs.length - 1]).html(_newTabName);
                        AddSystemTab();
                        return false;
                    }
                }

                appPointer.ToolsPaneController.SetActivePanelForTab(ui.panel.id);
            },
            remove: function (event, ui) {                
                appPointer.ToolsPaneController.RemovePanel(ui.panel.id);
            }
        });

        $("#" + _thisId + " span.ui-icon-close").live("click", function () {
            _systemSelect = true;
            var $tabs = $("#" + _thisId);
            var index = $("li", $tabs).index($(this).parent());
            $tabs.tabs("remove", index);
            _tabs.splice(index, 1);
            var liElements = $("li", $tabs);

            if (liElements.length - 1 == index)  // значит удалили предпоследний элемент
                $($tabs.find("a.tabHeaderAnchor")[index - 1]).click();
        });

        _container.tabs("remove", 0);  // удаляем вкладку по дефолту        
    }

    this.AddTab = function (title) {        
        AddTab(title);
    }

    this.AddSystemTab = function () {
        AddSystemTab();        
    }

    function AddSystemTab() {
        AddTab("&nbsp;");
    }

    function AddTab(title) {

        if (title == undefined)
            title = _newTabName;
        var tabId = _thisId + "_tabs-" + _tabCounter;
        _container.tabs("add", "#" + tabId, title);        
        SelectePrepTab();
        
        _tabCounter++;
    }


    function SelectePrepTab() {
        var $tabs = _container.find("a.tabHeaderAnchor");

        if (_tabs.length >= 2) {
            _systemSelect = true;
            _container.tabs("select", _tabs.length - 1);
            $($tabs[_tabs.length - 2]).click()
        }
    }

    Init();    
}